home *** CD-ROM | disk | FTP | other *** search
/ La Bible Des… Fonts / La Bible des... Fonts.iso / Utilitaires / Font Tuner / About Fonts Folder Tuner next >
Text File  |  1993-06-14  |  7KB  |  88 lines

  1. Fonts Folder Tuner v 1.0
  2. 14 Jun 93
  3. joe holt
  4.  
  5. What's Wrong With My Fonts Folder?
  6.  
  7. A few months ago after installing System 7.1 I noticed that my Mac seemed to have a lot less memory available to applications than it used to. Being a programmer nerd and all I decided to look into it and discovered this:
  8.  
  9. *** There's a bug with System 7.1's Fonts folder ***
  10.  
  11. Yikes! What did he say? A bug in Apple system software?!?
  12.  
  13. Don't worry. So far as I can tell there are no crashing or data-loss side effects of this bug, and it only affects about half of the Macs I've checked.
  14.  
  15. Here's what happens:
  16.  
  17. When System 7.1 starts up, before any extensions load, it looks at all of the fonts in the Fonts folder. As it's looking at them, it loads each font into memory one at a time. I guess it's looking inside and building its list of available fonts and doing whatever other magic it does.
  18.  
  19. The problem is that on some Macs it forgets to unload the font before it loads the next one. The result is that every font on your Mac is loaded and locked down forever and ever, taking up lots of memory that is supposed to be reused by applications.
  20.  
  21. How much memory? Anywhere from about 3K to 40K per font, depending on the font. If you have lots of fonts installed on your Mac, this adds up. I have about 40 font packages (245 items) in my Fonts folder, and this eats up about 1.5 megs. Thats a meg and a half that could be used to run Quark XPress or MS Word.
  22.  
  23. What Does Fonts Folder Tuner Do?
  24.  
  25. I narrowed the bug down to a single byte in System 7.1's System file. Fonts Folder Tuner changes this byte to what it should be. It doesn't install extensions or mess with any other files besides the System file. You only need to run Fonts Folder Tuner once.
  26.  
  27. Isn't This Dangerous?
  28.  
  29. Only if you turn power off while Fonts Folder Tuner is working. It may take a few minutes; let it finish.
  30.  
  31. Shouldn't I Wait Until Apple Fixes The Problem?
  32.  
  33. Sure, if you haven't noticed the problem on your Mac. They'll fix it sooner or later. Apple knows about the problem and they'll probably fix it in the first System 7.1 Tune Up they release. They're also going to fix it in the ROMs of future machines.
  34.  
  35. However, if you have lots of fonts and you think this bug is biting you, I suggest you use Fonts Folder Tuner and get rid of the problem today.
  36.  
  37. How Do I Use Fonts Folder Tuner?
  38.  
  39. It basically runs itself, so just run the program and watch and wait. When it's over you should restart your Mac to take advantage of the fix.
  40.  
  41. As an experiment, do this: before using Fonts Folder Tuner, restart your Mac and write down how much memory is being used by System Software, as shown in the "About This Macintosh..." item in the Finder's Apple menu. Then use Fonts Folder Tuner, restart, and check this figure again. If it's significantly less, then you were probably one of the lucky ones affected by the Fonts folder bug.
  42.  
  43. This fix has no adverse effects on those Macs which don't seem to have the problem.
  44.  
  45. Good luck.
  46.  
  47. joe holt
  48. Macintosh Engineer
  49. Adobe Systems Inc.
  50. jholt@adobe.com
  51. (415) 962-2097
  52.  
  53. For the technically curious, here's the low-down on the bug:
  54.  
  55. As the startup code checks each font, it sets a byte in memory to tell the bottom of the loop whether it should release the font or not. However, this check at the bottom tests a *word* before the branch-if-equal to the release code. On many machines this second byte is non-zero, so the test always clears Z and the branch is never taken. The fix is as simple as changing the TST.W to a TST.B.
  56.  
  57. If you're interested in confirming whether you have this bug, use your favorite debugger and look at all of the FOND resources in the system heap. If you've got a lot and they're locked down, you've got the problem.
  58.  
  59. If you're interested in seeing the bug in action, use MacsBug to drop into the debugger as soon as it loads (hold the control key down at startup) and set an A-Trap on GetIndResource. This will hit at the top of the font loading loop.
  60.  
  61. The first thing the font loading code does after the GetIndResource is set the byte at -$0230(A6)--the flag which says to release the font at the bottom--based on the state of bit 2 of low-mem $0B20. Does anyone know what this bit indicates? It's set within the Resource Manager and my best guess is that it means the resource was already in memory.
  62.  
  63. Continue tracing over the LoadResource and GetResInfo, etc until you see code that looks like this:
  64.  
  65.             MOVE.L     -$0004(A6),TopMapHndl
  66.             MOVE.W     $0008(A6),CurMap
  67.             MOVE.L     A4,-(A7)
  68.             MOVE.W     -$0230(A6),-$022E(A6)
  69.             JSR        sfntNFNT+00AA
  70.  
  71. Your debugger may or may not be able to resolve the label on the JSR, but that doesn't matter. You see that the flag at -$0230(A6) is being copied (as a word) into -$022E(A6). Go ahead and step into this routine.
  72.  
  73. This is the routine that releases the font if the flag is clear. The first thing it does is test the flag at -$022E(A6), but it tests it as a word:
  74.  
  75.             TST.W      -$022E(A6)
  76.             BEQ.S      sfntNFNT+00BA
  77.  
  78. If the other byte at -$022F(A6) is non-zero, the branch is never taken and no fonts are released. Oops.
  79.  
  80. The fix, as I've said, is to change the TST.W to a TST.B. Step through this loop a couple of times to see for yourself that the release code is never called. You can change the code in place by changing the second byte of the TST opcode from $6E to $2E.
  81.  
  82. It'd be interesting to learn what the other byte--which by this time should be unused--means. When this byte is non-zero it tends to stay the same value from restart to restart for a particular Mac, which suggests that it's set by prior pieces of the startup code and that its value has something to do with the Mac's configuration. Mine is always 2.
  83.  
  84. The other half of the problem was locating the resource within the System file from which this code is loaded. I learned a lot about the linked patch loader this way. The long and short of it is that it's in an 'lpch' resource ID 31, at offset 211513 (hex $33A39). You can see for yourself with ResEdit. The value is $6E and should be $2E. All that Fonts Folder Tuner does is change this byte. You can do it yourself if you'd like. Don't forget to turn off the compressed flag in the Resource Info for that resource (otherwise your System won't boot! I don't know how many times I've frustrated myself trying to make a change to the System file before I realized this!).
  85.  
  86. To end on a good note, Apple engineers were very positive when I told them about this, and DTS is pushing for a Tune Up release as soon as possible. Thank you Apple engineers for making great System software. We all know it's impossible to get all of the bugs out.
  87.  
  88. /joe